home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #2 / Monster Media No. 2 (Monster Media)(1994).ISO / utils1 / exc35a.zip / EXC.HST < prev    next >
Text File  |  1994-07-07  |  20KB  |  438 lines

  1. REVISIONS FOR VERSION 1.1 OF EXC.EXE
  2.  
  3. Many thanks to the few users who have reported problems and/or suggested
  4. enhancements.  If you don't report them and I don't find them, they don't 
  5. get fixed.
  6.  
  7.  
  8. 1. I apologize for the EXC.DOC file.  In my rush to get it documented and
  9.    uploaded, I neglected to spell check or proofread it.  It was terrible.
  10.    I hope it is much more readable now.
  11.  
  12. 2. Leading and trailing TAB characters (hex 09) were not being removed from
  13.    script lines, causing invalid command messages.
  14.  
  15. 3. There appears to be a need in the user community to repeat commands,
  16.    groups of commands and keys a known number of times to allow them to 
  17.    write smaller scripts.
  18.  
  19.    Added "ON n label".  This is a powerfull loop control command similar
  20.    to the logic used in FOR statements common in many programming languages.
  21.  
  22.    Added a repeat number that can be added to the end of a KEY command.  The
  23.    key that is specified will be repeated as many times as specified.  For
  24.    instance, "KEY <TAB> 5" stuffs five tabs into the keyboard buffer.
  25.  
  26. 4. Fixed a problem where certain invalid key mnemonics were not generating
  27.    error messages.
  28.  
  29. 5. If you loop through SEARCH commands looking for multiple possible messages
  30.    that could occur, each time the timer interrupt is invoked (18.2/sec) the
  31.    entire screen is read, reformatted to remove attributes and searched for
  32.    each SEARCH in the loop.  WAITFOR and WAITSCR have built-in one second
  33.    delays between screen reads to minimize this overhead.
  34.  
  35.    One solution is to stick a DELAY in the loop, but if you do this between
  36.    each SEARCH, execution of the script will slow down dramatically.
  37.  
  38.    I added a READ command that will read the screen and do nothing else.
  39.  
  40.    I then added a LOOK command that searches the screen buffer that was last 
  41.    read by a READ, SEARCH, WAITFOR or WAITSCR command.  It's just like the
  42.    SEARCH command without reading the screen prior to the search.
  43.  
  44.    EXAMPLE 1:                   EXAMPLE 2:          EXAMPLE 3:
  45.  
  46.    :Loop                        :Loop               :Loop
  47.      SEARCH "Continue?"           READ                SEARCH "Continue?"
  48.      IFY Continue                 LOOK "Continue?"    IFY Continue
  49.      LOOK "ERROR:"                IFY Continue        LOOK "ERROR:"
  50.      IFY Error                    LOOK "ERROR:"       IFY Error
  51.      GOTO Loop                    IFY Error           DELAY 1
  52.    :Continue                      DELAY 1             GOTO Loop
  53.      .                            GOTO Loop         :Continue
  54.      .                          :Continue             .
  55.    :Error                         .                   .
  56.      .                            .                 :Error
  57.      .                          :Error                .
  58.                                   .                   .
  59.                                   .
  60.  
  61.    In the above examples, Example 1 shows how you would have intuitavely
  62.    coded the script in version 1.0.  Adding a DELAY 1 at the end of the 
  63.    loop would have helped performance, but two screen reads would be per-
  64.    formed each second.  Example two demonstrates how READ and LOOK could
  65.    be used to make a very efficient loop.  Example 3 shows that, since
  66.    a READ followed by a LOOK is equal to a SEARCH, so the third example
  67.    is the best because it takes two iterations of the interrupt to process
  68.    each command in the script.  The first iteration reads and formats the 
  69.    command and the second executes it.
  70.  
  71. 6. Installed COMMAND.COM as the default program name on the command line.
  72.  
  73. 7. Modified QUIT and end0of-script logic to issue EXIT if COMMAND.COM was 
  74.    invoked.
  75.  
  76.  
  77. REVISIONS FOR VERSION 1.2 OF EXC.EXE
  78.  
  79. Many thanks to the few users who have reported problems and/or suggested
  80. enhancements.  If you don't report them and I don't find them, they don't 
  81. get fixed.
  82.  
  83. 1.  Timeout processing was malfunctioning for WAITSCR.  Fixed.
  84.  
  85. 2.  READ and LOOK were mistakenly included in v1.1 documentation, but are
  86.     not actually implemented until v1.2.
  87.  
  88. 3.  In 1.1 and older, the maximum screen size was 80x50.  EXC returned an
  89.     error if you were in a larger screen mode.  Also I had to obtain a 8,000
  90.     byte buffer (character + attribute) to read the 80x50 screen regardless
  91.     of the text mode you were using.
  92.  
  93.     I must preallocte the screen buffer because the spawned program may
  94.     consume all remaining memory.  I can't just use the current video
  95.     settings since the spawned program may change the text mode.
  96.  
  97.     I have added a command "SCRMAX cols rows" that allows preallocation of
  98.     buffers for large screen sizes.  The default, if SCRMAX is not in the
  99.     script, will be the rows and columns of the text mode in use when EXC is
  100.     invoked.  Please read the documentation under SCRMAX for full usage 
  101.     instructions and the implications and penalties involved in reserving 
  102.     large screen buffers.
  103.  
  104.     This prevents wasting memory in screen sizes smaller than 80x50 and
  105.     allows EXC to fully function on screens larger than 80x50.
  106.  
  107.     Supported screen widths are from 40-200 columns.  Supported screen
  108.     heights are from 20-100 rows.
  109.  
  110. 1.  I no longer read the video attribute when I read the screen, thus
  111.     cutting screen buffer requirements in half.
  112.    
  113. 2.  To minimize problems with spawned programs which may also be using
  114.     timer interrupts, I have broken down the execution of many commands into
  115.     parts executed in multiple timer interrupts.
  116.    
  117. 3.  For the same reason as for the previous changes, I have cut the time 
  118.     down for error beeps and for the delay the beeps.  Errors, which emitted 
  119.     4 beeps now only beep twice.  
  120.    
  121. 4.  Timeouts, which emitted 3 beeps now emit no beep.  If you need
  122.     to know when a timeout occurred, place a beep in your script where
  123.     needed.  This is primarily because intentional timeouts could be quite 
  124.     common and don't require user attention.
  125.  
  126. 5.  Modified DELAY and TIMEOUT processing to compare against the system
  127.     clock instead of using countdown timers via INT 1C.  This gives more
  128.     accurate timing since 1C may or may not be called 18.2 times per 
  129.     second, depending on how long the interrupt handler had it tied up.
  130.  
  131. 6.  I have added key combinations that will terminate (LEFT and RIGHT SHIFT 
  132.     keys)and pause/resume (SCROLL LOCK) the execution of scripts.  Unlike
  133.     pressing the PAUSE key, SCROLL LOCK pauses only script execution and not
  134.     the spawned program.  The PAUSE key will suspend both.
  135.  
  136. 7.  I have insterted code that detects pause state and suspends all delays
  137.     until pause state is exited.  For example, if you press the PAUSE key 
  138.     5 seconds into a 10 second delay, when you press a key to resume 
  139.     processing, you will still have 5 seconds of delay before the next command
  140.     is executed.  No new commands will be initiated during pause state.
  141.  
  142. 8.  Fixed a problem that limited total memory allocations to 64k and sometimes
  143.     caused system halt if more was requested for scripts, screen or spawned
  144.     program.
  145.  
  146. 9.  Enhanced functionality and script debugging by adding the following 14
  147.     new commands:
  148.  
  149.     TICK           CLEAR           PAUSE            TIME           
  150.     WINMAX         WINCOLS         WINROWS          CURSOR
  151.     SHOWAT         SHOW            SHOWWIN          LOCATE
  152.     HIDEWIN        TYPFILE
  153.  
  154. 10. Rearranged the documentation so that commands are listed alphabetically.
  155.     Added more examples.  Added more in-depth explanations of operational
  156.     considerations that might effect EXC's performance or lack thereof.
  157.  
  158. 11. Included the script that I use for testing EXC in the distribution
  159.     files.  This provides at least one example of every command EXC 
  160.     recognizes.
  161.  
  162. 12. Allow entry of quotes within a string by substituting \q for ".
  163.  
  164.  
  165. Version 2.0a
  166.  
  167.    The programs in version 2.0a are identical to those in version 2.0, except
  168. for the registration remider screen.  The reminder screen and documentation 
  169. have been updated to include instructions on how to register EXC online via 
  170. CompuServe's SWREG section.
  171.  
  172.  
  173. REVISIONS FOR VERSION 2.1 OF EXC.EXE
  174.  
  175.  
  176. 1.  Recompiled EXC in 8086/8088 code so that it could be used on XT class
  177.     machines.  Performance impact on 286 and above processors is negligible.
  178.  
  179. 2.  Added a parameter to the QUIT instruction.  Normally on exit, EXC returns
  180.     the return code of the executed program.  If a number (0-255) is 
  181.     specified with the QUIT command, that value is returned as the DOS 
  182.     ERRORLEVEL return code instead of what was passed from the spawned
  183.     program.
  184.  
  185.     An example of why you would want to set a return code:
  186.  
  187.        I use EXC to control PROCOMM PLUS to execute a script that synchro-
  188.        nizes my clock with the Naval Observatory.  I need to know if it
  189.        fails.
  190.  
  191.        I can detect the error with my EXC script, but when I exit PCPLUS,
  192.        PCPLUS always returns a return code of 255.  Using the QUIT nn format,
  193.        I can set a return code of 1 on error and 0 when there is no error.
  194.  
  195. 3. After a PRTSC key mnemonic was executed, the script processor failed
  196.    to continue to the next line and terminated at that point.
  197.  
  198.  
  199. REVISIONS FOR VERSION 2.2 OF EXC.EXE
  200.  
  201. 1.  Added support for using environment variables in any command string 
  202. parameter.
  203.  
  204. 2.  When you tried to pass a parameter to the spawned program that
  205. contained spaces and was enclosed in quotes, the parameter arrived to
  206. the spawned program broken down into multiple one-word parameters.  While
  207. EXC was passing it as a single parameter, DOS was breaking it down.  I had
  208. to make sure each parameter passed to the spawned program was enveloped
  209. in quotes in order to assure proper operation.
  210.  
  211. 3.  EXC could have been copying one or more input parameters to uninitialized
  212. string pointers.  This means that the parameters could have been copied 
  213. anywhere in memory.  These storage violations could cause random errors 
  214. varying in degree of nastiness and symptioms.  These pointers now point to
  215. a fixed array of allocated memory.
  216.  
  217.     If you experienced random, strange occurances after using EXC, this could
  218. be the cause.  It could also cause QEMM exception 13 errors.  I examine my
  219. code very closely for these nastiest of bugs, but with the flexibilty of
  220. data types, pointers and arrays used in C++, it is nearly impossible to find
  221. them until a repeatable error can be found.
  222.  
  223.     If you experience unusual problems after using EXC v2.2, try your best to
  224. repeat them.  If you can in any way recreate the problem or narrow down the
  225. activity that causes the problem, let me know.  EXC is becoming a very stable
  226. product now, thanks to your help.  In this type of program it is impossible
  227. to test every combination that users will use.
  228.  
  229.  
  230. REVISIONS FOR VERSION 2.3 OF EXC.EXE
  231.  
  232. Version 2.2 attempted to properly pass quoted parameters by enclosing all
  233. parameters in quotes.  While this worked fine on Borland C and C++ programs, 
  234. if the spawned program was PASCAL or assembler, it received the parameter with
  235. the quotes.  Since most programmers were not expecting quoted parameters,  
  236. they had no code to handle them.  Borland C always removed the quotes before
  237. a program could access the parameters.  This means that EXC VERSION 2.2 DID
  238. NOT WORK WHEN MOST PASCAL AND ASSEMBLER PROGRAMS WERE INVOKED.
  239.  
  240. I now check each parameter for a space, |, < or >.  If it contains one of
  241. these, I assume the input string was quoted and pass it on with surrounding
  242. quotes.  All other parameters are passed as-is.  
  243.  
  244. \" can no longer be used to imbed quotes in a parameter to be passed to a
  245. spawned program.  \q must be used instead.
  246.  
  247.  
  248. REVISIONS FOR VERSION 2.4 OF EXC.EXE
  249.  
  250. 1.  Although EXC processed correctly, sometimes an erroneous warning message
  251.     would appear at the end of the job stating that the script had failed to
  252.     complete and claiming to have stopped at the last command in the script.
  253.     The last command had, in fact, been executed.
  254.  
  255. 2.  Instead of assuming COMMAND.COM for the default when no spawned program
  256.     is specified, I now use the program specified in the COMSPEC environment
  257.     variable.  If COMPSEC is not found in the environment, I then use
  258.     COMMAND.COM.
  259.  
  260.  
  261.  
  262. REVISIONS FOR VERSION 2.5 OF EXC.EXE
  263.  
  264. 1. It appears that a few applications and at least one well known appli-
  265.    cation development package actually write binary zeros to certain parts of 
  266.    screen memory.  These appear as spaces on the screen but are actually read 
  267.    as binary zeros when EXC reads screen memory.  When EXC is searching the 
  268.    video memory for a string, it uses a string search algorithm that is 
  269.    terminated at the first binary zero.  This is because C++ uses binary 
  270.    zeros to terminate strings. 
  271.  
  272.    The result is that certain string text would be displayed on the screen 
  273.    but would not be located by EXC because the search was terminated 
  274.    prematurely.
  275.  
  276.    EXC now replaces any binary zeros in the screen buffer text with spaces.
  277.    This allows the search to perform as expected.
  278.  
  279. 2. The ON function did not work properly when the counter was more than 9.
  280.    This has been corrected.
  281.  
  282.  
  283. REVISIONS FOR VERSION 2.6 OF EXC.EXE
  284.  
  285.  The DELAY and TICK commands did not always work properly if the wait
  286.  state was in effect at midnight when the system timer clock rolls over
  287.  to zero.  EXC has been modified to compensate for this possibility.
  288.  
  289. Version 2.6a:
  290.  
  291.  We are moving.  Updated registration screen and documentation to show 
  292.  new address.  No functional changes.
  293.  
  294.  
  295. REVISIONS FOR VERSION 2.7 OF EXC.EXE
  296.  
  297. 1.  Prior versions of EXC did not work on a few common programs that had
  298.     their own keyboard interrupt handler.  EXC has been modified so that
  299.     it works on more of these programs than it used to.  Since custom 
  300.     interrupt handlers can do anything they want, I cannot guarantee oper-
  301.     ation on all of these programs.  Fortunately, there are not many of 
  302.     them.  Microsoft's EDIT and QBASIC editor now work properly under EXC.
  303.  
  304. 2.  Changed the TESTEXC.SCR script and TESTEXC.BAT batch file to operate
  305.     with the DOS EDIT command found in DOS 5 and up.
  306.  
  307. 3.  Fixed a problem where, under the right conditions, some letters could 
  308.     be lost or scrambled when long strings were stuffed in the buffer.
  309.     This would especially be prevalent in slower CPUs.
  310.  
  311. 4.  When EXC tried to branch to an invalid label, the correct error message
  312.     was generated, but the STOPPED AT: message displayed garbage.  It now
  313.     points to the offending command.
  314.  
  315.  
  316. REVISIONS FOR VERSION 2.8 OF EXC.EXE
  317.  
  318. 1.  Release 2.7 fixed a problem that did not allow it to run on a few 
  319.     programs with keyboard interrupt handlers.  In correcting the problem,
  320.     performance suffered when long TYPE or TYPFILE commands were issued.
  321.     Release 2.8 restores the lost performance.
  322.  
  323. 2.  Added the SLOW, FAST, INT9 and NOINT9 commands for performance tuning and 
  324.     reliability.  See EXC.DOC for an explanation of these commands.
  325.  
  326.  
  327. REVISIONS FOR VERSION 2.9 OF EXC.EXE
  328.  
  329. 1.  Some text editors do not automatically place a carriage return at the
  330.     end of the last line of a text file.  If a script was created which
  331.     did not end the last line with a carriage return, the last line would
  332.     be ignored by EXC.  Fixed.
  333.  
  334. 2.  Abbreviated the registration reminder screen and reduced the delay from
  335.     five seconds to three to comply with the requirements of the Association 
  336.     of Shareware Professionals (ASP).
  337.  
  338. 3.  Revised the documentation to meet submission requirements of the ASP.
  339.  
  340. 4.  Modified to use pre-compiled subfunctions from a library, rather than 
  341.     included source.  This has no bearing on EXC's functionality.
  342.  
  343. 5.  Added information in the documentation for problems in using EXC with
  344.     some remote control communications programs.  Included suggestions for
  345.     resolving the problems.
  346.  
  347.  
  348. REVISIONS FOR VERSION 3.0 OF EXC.EXE
  349.  
  350. 1.  A big reason for this release to be 3.0 is that I was running out of
  351.     release numbers under 2.x.  However, there is one major feature addition
  352.     that, while not often used, is a major step forward is making EXC
  353.     usable in almost any DOS application.  This might justify the major
  354.     version number jump.
  355.  
  356.     You can now enter three-key and four-key combinations using SHIFT, ALT
  357.     and CTRL.  This was no easy task since these keys do have keyboard 
  358.     scan codes and cannot be stuffed in the keyboard buffer.  Please read the
  359.     EXC.DOC file before using three- or four-key combinations.
  360.  
  361.  
  362. 2.  Added a parameter to the SLOW command to let you vary the speed at
  363.     which strings and files will be typed.
  364.  
  365. 3.  Some text editors do not automatically place a carriage return at the
  366.     end of the last line of a text file.  If a script was created which
  367.     did not end the last line with a carriage return, the last line would
  368.     be ignored by EXC.  Fixed.
  369.  
  370. 4.  Abbreviated the registration reminder screen and reduced the delay from
  371.     five seconds to three to comply with the requirements of the Association 
  372.     of Shareware Professionals (ASP).
  373.  
  374. 5.  Revised the documentation to meet submission requirements of the ASP.
  375.  
  376. 6.  Modified to use pre-compiled subfunctions from a library, rather than 
  377.     included source.  This has no bearing on EXC's functionality.
  378.  
  379. 7.  Added information in the documentation for problems in using EXC with
  380.     some remote control communications programs.  Included suggestions for
  381.     resolving the problems.
  382.  
  383. VERSION 3.0a
  384.  
  385.     EXC v3.0a is functionally equivalent to v3.0.  The documentation has
  386.     been modified to include the new address and phone number of Parity
  387.     Solutions.
  388.  
  389.  
  390. Version 3.1 modifications:
  391.  
  392. 1.  Prior versions had an undocumented quirk which prevented a second ON
  393.     command from being processed while another was active.  The quirk has
  394.     been documented in EXC.DOC and the ONRESET command added to allow
  395.     forced termination of a previous ON command.
  396.  
  397. 2.  A problem with environment variable substitution could sometimes cause
  398.     unpredictable results.  Corrected.
  399.  
  400. 3.  Added capability to set and change up to 16 user variables.  As a side
  401.     effect, subroutine execution is now possible.
  402.  
  403. Version 3.2 modifications:
  404.  
  405. 1.  Created special handling routines to handle many previously undefined
  406.     key combinations.
  407.  
  408. 2.  Created the EXCDEMO program for authors who wish to distribute automated
  409.     demos of their software.  Included information about EXCDEMO in the 
  410.     EXC.DOC file.
  411.  
  412. Version 3.3 modifications:
  413.  
  414. 1.  Added the HLOCATE, VLOCATE, CURSX and CURSY commands to help automate
  415.     menu navigation.
  416.  
  417. 2.  Borland's C and C++ compilers have always allowed a program name without
  418.     an extension to be supplied to the spawn function.  It would append .COM 
  419.     and .EXE in its attempts to load the file.  Version 4.0's spawn  does not 
  420.     provide this capability and I had to add the code to perform this 
  421.     function and provide compatability with previous versions of EXC.
  422.  
  423. 3.  The Borland C++ v4 includes 20k of exception handling code in every 
  424.     program whether C++ exception handling is used or not.  This extra
  425.     20k is unnaceptable for EXC.  With great difficulty, I found a way
  426.     to exclude the code from my C++ program.  If your diskette shipment
  427.     was late, it was because I was struggling with this problem before
  428.     shipping any version 3.3 copies.
  429.  
  430. Version 3.4 modifications:
  431.  
  432. 1. Added the FILE, GET, and REWIND commands to allow record level access
  433.    to an external file.
  434.  
  435. 2. Since Borland C++ v4.0 no longer supports code generation for 8088/8086
  436.    systems, EXC now requires at least a 286 processor.
  437.  
  438.